package kayttoliittyma;

import java.awt.Color;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import opintopaivakirja.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.Vector;
import javax.swing.BoxLayout;
import javax.swing.JFileChooser;
import java.io.File;

// TODO KÄYTTÄJÄ.PROJEKTIT + PAIKKA TOIMINTA AIVAN PASKA AJATUS. PITÄÄ TEHDÄ JOKU AKTIIVINEN PROJEKTI ILMENTYMÄ TMS TAVALLA.
/**
 *
 * @author Erkkinuuttinen
 */
public class TiedotJaMuistiinpanot extends javax.swing.JPanel {

    /**
     *
     */
    public TiedotJaMuistiinpanot() {
        initComponents();
    }

    /** Creates new form TiedotJaMuistiinpanot
     * @param kayttaja
     * @param projektit käyttäjän omat projektit
     * @param paikka projektin paikka puuherarkiassa
     */
    public TiedotJaMuistiinpanot(Kayttaja kayttaja, ArrayList<Projekti> projektit, int paikka) {
        initComponents();

        jPanelMuistiinpanot.setLayout(new BoxLayout(jPanelMuistiinpanot, BoxLayout.Y_AXIS));
//        jPanelMuistiinpanot.setLayout(new FlowLayout(FlowLayout.LEFT));
//        jPanelMuistiinpanot.setLayout(new GridLayout(0, 1));

        this.panelit = new ArrayList<PanelTavoite>();

        this.kayttaja = kayttaja;
        this.projektit = projektit;
        this.paikka = paikka;


        // asetetaan formiin tiedot
        this.asetaProjektinTiedot(projektit, paikka);

        this.asetaMuistiinpanojenTiedot();
    }

    private void asetaMuistiinpanojenTiedot() {
        int lkm = projektit.get(paikka).getMuistiinpanot().size();

        // Muistiinpanojen asetus
        //  System.out.println("Muistiipanojen asetus:");


        if (lkm == 0) {
            PanelTavoite pt = new PanelTavoite();
            panelit.add(pt);
            //  System.out.println("PANELIT SIZE " + panelit.size());
            jPanelMuistiinpanot.add(pt);
        } else {
            for (Muistiinpano tavoite : projektit.get(paikka).getMuistiinpanot()) {
                if (tavoite instanceof Tavoite) {
                    //   System.out.println("Tavoite on " + tavoite.getOtsikko());

                    PanelTavoite pt = new PanelTavoite(projektit.get(paikka).getMuistiinpanot(), tavoite);
                    panelit.add(pt);
                    //    System.out.println("PANELIT SIZE " + panelit.size());
                    jPanelMuistiinpanot.add(pt);
                }
            }
        }

        this.validate();
        this.updateUI();
    }

    private Projekti palautaKenttienArvotProjektiin() {

        // nämä pitää tehdä niin että tarkistetaan mitä syötetään
        projektit.get(paikka).setNimi(jTextFieldProjekti.getText());
        projektit.get(paikka).setEsittely(jTextAreaKuvaus.getText());
        projektit.get(paikka).setLinkki(jTextFieldLinkki.getText());
        projektit.get(paikka).setPvm_alku(java.sql.Date.valueOf(jTextFieldAlku.getText()));
        projektit.get(paikka).setPvm_loppu(java.sql.Date.valueOf(jTextFieldLoppu.getText()));
        projektit.get(paikka).setArviointi(jTextAreaArviointi.getText());

        ArrayList<Muistiinpano> muistiinpanot = new ArrayList<Muistiinpano>();

        for (PanelTavoite pam : panelit) {
            for (Muistiinpano muistiinpano : pam.getTavoiteJaMuistiinpanot()) {
                muistiinpanot.add(muistiinpano);
            }
        }

        projektit.get(paikka).getMuistiinpanot().clear();
        projektit.get(paikka).setMuistiinpanot(muistiinpanot);

        return projektit.get(paikka);
    }

    private void asetaProjektinTiedot(ArrayList<Projekti> projektit, int paikka) {

        // valitaan taulukossa haluttu projekti
        Projekti projekti = projektit.get(paikka);
        // asetetaan tiedot
        jTextFieldProjekti.setText(projekti.getNimi());
        if (!projekti.getNimi().equals("")) {
            jTextFieldProjekti.setForeground(Color.black);
        }

        jTextAreaKuvaus.setText(projekti.getEsittely());
        if (!projekti.getEsittely().equals("")) {
            jTextAreaKuvaus.setForeground(Color.black);
        }

        jTextFieldLinkki.setText(projekti.getLinkki());
        if (!projekti.getLinkki().equals("")) {
            jTextFieldLinkki.setForeground(Color.black);
        }

        jTextFieldLoppu.setText(projekti.getPvm_loppu().toString());
        jTextFieldAlku.setText(projekti.getPvm_alku().toString());

        SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy H:mm:ss", Locale.GERMANY);
        jLabelPaivitetty.setText(formatter.format(projekti.getPvm_paivitetty()));

        jTextAreaArviointi.setText(projekti.getArviointi());


        // ComboBox

        Vector<String> pnimet = new Vector<String>();

        // projektin isa
        int isa = this.kayttaja.getProjektit().get(paikka).getIsa();
        Projekti isaP = new Projekti();
        for (Projekti projekti1 : kayttaja.getProjektit()) {
            if (projekti1.getId() == isa) {
                isaP = projekti1;
            }
        }

        pnimet.add(" – "); // ilman yläprojektia

        for (Projekti p : projektit) {
            if (!p.getNimi().equals(projekti.getNimi())) {
                pnimet.add(p.getNimi());
            }
        }

        int isanpaikka = 0;
        for (int i = 0; i < pnimet.size() - 1; ++i) {
            if (pnimet.get(i).equals(isaP.getNimi())) {
                isanpaikka = i;
            }
        }

        jComboBoxKuuluu.setModel(new javax.swing.DefaultComboBoxModel(pnimet));
        jComboBoxKuuluu.setSelectedIndex(isanpaikka);
        jComboBoxKuuluu.updateUI();

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        otsikko = new javax.swing.JLabel();
        merkki = new javax.swing.JLabel();
        jPanelProjekti = new javax.swing.JPanel();
        jTextFieldProjekti = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextAreaKuvaus = new javax.swing.JTextArea();
        jLabel3 = new javax.swing.JLabel();
        jComboBoxKuuluu = new javax.swing.JComboBox();
        jTextFieldLinkki = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jButtonTallenna = new javax.swing.JButton();
        jTextFieldAlku = new javax.swing.JTextField();
        jTextFieldLoppu = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabelPaivitetty = new javax.swing.JLabel();
        jButtonSelaa = new javax.swing.JButton();
        otsikko2 = new javax.swing.JLabel();
        merkki1 = new javax.swing.JLabel();
        jPanelMuistiinpanot = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        merkki2 = new javax.swing.JLabel();
        otsikko3 = new javax.swing.JLabel();
        jPanelArviointi = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextAreaArviointi = new javax.swing.JTextArea();

        otsikko.setFont(new java.awt.Font("Tahoma", 1, 12));
        otsikko.setText("Projektin tiedot");
        otsikko.setName("otsikko"); // NOI18N
        otsikko.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                otsikkoMouseReleased(evt);
            }
        });

        merkki.setText("▼");
        merkki.setName("merkki"); // NOI18N
        merkki.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                merkkiMouseReleased(evt);
            }
        });

        jPanelProjekti.setName("jPanelProjekti"); // NOI18N

        jTextFieldProjekti.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldProjekti.setText("Projektin nimi");
        jTextFieldProjekti.setName("jTextFieldProjekti"); // NOI18N
        jTextFieldProjekti.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jTextFieldProjektiMousePressed(evt);
            }
        });
        jTextFieldProjekti.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldProjektiFocusLost(evt);
            }
        });

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        jTextAreaKuvaus.setColumns(20);
        jTextAreaKuvaus.setFont(new java.awt.Font("Tahoma", 0, 12));
        jTextAreaKuvaus.setForeground(new java.awt.Color(153, 153, 153));
        jTextAreaKuvaus.setRows(5);
        jTextAreaKuvaus.setText("Kuvaus");
        jTextAreaKuvaus.setName("jTextAreaKuvaus"); // NOI18N
        jTextAreaKuvaus.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jTextAreaKuvausMousePressed(evt);
            }
        });
        jTextAreaKuvaus.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextAreaKuvausFocusLost(evt);
            }
        });
        jScrollPane1.setViewportView(jTextAreaKuvaus);

        jLabel3.setText("Kuuluu:");
        jLabel3.setName("jLabel3"); // NOI18N

        jComboBoxKuuluu.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        jComboBoxKuuluu.setName("jComboBoxKuuluu"); // NOI18N
        jComboBoxKuuluu.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBoxKuuluuActionPerformed(evt);
            }
        });

        jTextFieldLinkki.setForeground(new java.awt.Color(153, 153, 153));
        jTextFieldLinkki.setText("Linkki");
        jTextFieldLinkki.setName("jTextFieldLinkki"); // NOI18N
        jTextFieldLinkki.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jTextFieldLinkkiMousePressed(evt);
            }
        });
        jTextFieldLinkki.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldLinkkiFocusLost(evt);
            }
        });

        jLabel5.setText("Alkaa:");
        jLabel5.setName("jLabel5"); // NOI18N

        jLabel6.setText("Loppuu:");
        jLabel6.setName("jLabel6"); // NOI18N

        jButtonTallenna.setText("Tallenna");
        jButtonTallenna.setName("jButtonTallenna"); // NOI18N
        jButtonTallenna.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                TallennaNappiAction(evt);
            }
        });

        jTextFieldAlku.setName("jTextFieldAlku"); // NOI18N
        jTextFieldAlku.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldAlkuFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldAlkuFocusLost(evt);
            }
        });

        jTextFieldLoppu.setName("jTextFieldLoppu"); // NOI18N
        jTextFieldLoppu.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextFieldLoppuFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldLoppuFocusLost(evt);
            }
        });

        jLabel7.setForeground(new java.awt.Color(153, 153, 153));
        jLabel7.setText("vvvv-kk-pp");
        jLabel7.setName("jLabel7"); // NOI18N

        jLabel8.setForeground(new java.awt.Color(153, 153, 153));
        jLabel8.setText("vvvv-kk-pp");
        jLabel8.setName("jLabel8"); // NOI18N

        jLabelPaivitetty.setForeground(new java.awt.Color(153, 153, 153));
        jLabelPaivitetty.setText("Päivitetty");
        jLabelPaivitetty.setName("jLabelPaivitetty"); // NOI18N

        jButtonSelaa.setText("Selaa");
        jButtonSelaa.setName("jButtonSelaa"); // NOI18N
        jButtonSelaa.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSelaaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanelProjektiLayout = new javax.swing.GroupLayout(jPanelProjekti);
        jPanelProjekti.setLayout(jPanelProjektiLayout);
        jPanelProjektiLayout.setHorizontalGroup(
            jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelProjektiLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 605, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelProjektiLayout.createSequentialGroup()
                        .addComponent(jTextFieldProjekti, javax.swing.GroupLayout.PREFERRED_SIZE, 353, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jLabel3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jComboBoxKuuluu, 0, 202, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelProjektiLayout.createSequentialGroup()
                        .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel5)
                            .addComponent(jLabel6))
                        .addGap(32, 32, 32)
                        .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextFieldLoppu)
                            .addComponent(jTextFieldAlku, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanelProjektiLayout.createSequentialGroup()
                                .addComponent(jLabel8)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 285, Short.MAX_VALUE)
                                .addComponent(jLabelPaivitetty)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jButtonTallenna))
                            .addComponent(jLabel7)))
                    .addGroup(jPanelProjektiLayout.createSequentialGroup()
                        .addComponent(jTextFieldLinkki, javax.swing.GroupLayout.DEFAULT_SIZE, 540, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonSelaa)))
                .addContainerGap())
        );
        jPanelProjektiLayout.setVerticalGroup(
            jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelProjektiLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldProjekti, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(jComboBoxKuuluu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE)
                .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextFieldLinkki, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButtonSelaa))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(jPanelProjektiLayout.createSequentialGroup()
                        .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel5)
                            .addComponent(jTextFieldAlku, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel7))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel6)
                            .addComponent(jTextFieldLoppu, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel8)))
                    .addGroup(jPanelProjektiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jButtonTallenna)
                        .addComponent(jLabelPaivitetty)))
                .addGap(28, 28, 28))
        );

        otsikko2.setFont(new java.awt.Font("Tahoma", 1, 12));
        otsikko2.setText("Projektin tavoitteet ja muistiinpanot");
        otsikko2.setName("otsikko2"); // NOI18N
        otsikko2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                otsikko2MouseReleased(evt);
            }
        });

        merkki1.setText("▼");
        merkki1.setName("merkki1"); // NOI18N
        merkki1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                merkki1MouseReleased(evt);
            }
        });

        jPanelMuistiinpanot.setName("jPanelMuistiinpanot"); // NOI18N
        jPanelMuistiinpanot.addContainerListener(new java.awt.event.ContainerAdapter() {
            public void componentAdded(java.awt.event.ContainerEvent evt) {
                jPanelMuistiinpanotComponentAdded(evt);
            }
        });

        javax.swing.GroupLayout jPanelMuistiinpanotLayout = new javax.swing.GroupLayout(jPanelMuistiinpanot);
        jPanelMuistiinpanot.setLayout(jPanelMuistiinpanotLayout);
        jPanelMuistiinpanotLayout.setHorizontalGroup(
            jPanelMuistiinpanotLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 605, Short.MAX_VALUE)
        );
        jPanelMuistiinpanotLayout.setVerticalGroup(
            jPanelMuistiinpanotLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 196, Short.MAX_VALUE)
        );

        jButton1.setText("Lisää uusi tavoite");
        jButton1.setName("jButton1"); // NOI18N
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        merkki2.setText("▼");
        merkki2.setName("merkki2"); // NOI18N
        merkki2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                merkki2MouseReleased(evt);
            }
        });

        otsikko3.setFont(new java.awt.Font("Tahoma", 1, 12));
        otsikko3.setText("Arviointi");
        otsikko3.setName("otsikko3"); // NOI18N
        otsikko3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                otsikko3MouseReleased(evt);
            }
        });

        jPanelArviointi.setName("jPanelArviointi"); // NOI18N

        jScrollPane2.setName("jScrollPane2"); // NOI18N

        jTextAreaArviointi.setColumns(20);
        jTextAreaArviointi.setFont(new java.awt.Font("Tahoma", 0, 12));
        jTextAreaArviointi.setForeground(new java.awt.Color(153, 153, 153));
        jTextAreaArviointi.setRows(5);
        jTextAreaArviointi.setText("Arviointi");
        jTextAreaArviointi.setName("jTextAreaArviointi"); // NOI18N
        jTextAreaArviointi.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTextAreaArviointiFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextAreaArviointiFocusLost(evt);
            }
        });
        jScrollPane2.setViewportView(jTextAreaArviointi);

        javax.swing.GroupLayout jPanelArviointiLayout = new javax.swing.GroupLayout(jPanelArviointi);
        jPanelArviointi.setLayout(jPanelArviointiLayout);
        jPanelArviointiLayout.setHorizontalGroup(
            jPanelArviointiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelArviointiLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 585, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanelArviointiLayout.setVerticalGroup(
            jPanelArviointiLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelArviointiLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanelProjekti, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(merkki)
                        .addGap(18, 18, 18)
                        .addComponent(otsikko))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(10, 10, 10)
                                .addComponent(jPanelMuistiinpanot, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(merkki1)
                                .addGap(18, 18, 18)
                                .addComponent(otsikko2))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(39, 39, 39)
                        .addComponent(jButton1)
                        .addGap(112, 112, 112))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(10, 10, 10)
                                .addComponent(jPanelArviointi, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(merkki2)
                                .addGap(18, 18, 18)
                                .addComponent(otsikko3)))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(merkki)
                    .addComponent(otsikko))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelProjekti, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(merkki1)
                    .addComponent(otsikko2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelMuistiinpanot, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButton1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(merkki2)
                    .addComponent(otsikko3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanelArviointi, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void otsikkoMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_otsikkoMouseReleased
        if (jPanelProjekti.isVisible()) {
            jPanelProjekti.setVisible(false);
            merkki.setText("►");
        } else {
            jPanelProjekti.setVisible(true);
            merkki.setText("▼");
        }

}//GEN-LAST:event_otsikkoMouseReleased

    private void otsikko2MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_otsikko2MouseReleased
        if (jPanelMuistiinpanot.isVisible()) {
            jPanelMuistiinpanot.setVisible(false);
            merkki1.setText("►");
        } else {
            jPanelMuistiinpanot.setVisible(true);
            merkki1.setText("▼");
        }

}//GEN-LAST:event_otsikko2MouseReleased

    private void jTextFieldProjektiMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextFieldProjektiMousePressed
        jTextFieldProjekti.setForeground(Color.black);
        if (jTextFieldProjekti.getText().equals("Projektin nimi")) {
            jTextFieldProjekti.setText("");
        }

    }//GEN-LAST:event_jTextFieldProjektiMousePressed

    private void jTextAreaKuvausMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextAreaKuvausMousePressed
        jTextAreaKuvaus.setForeground(Color.black);
        if (jTextAreaKuvaus.getText().equals("Kuvaus")) {
            jTextAreaKuvaus.setText("");
        }

    }//GEN-LAST:event_jTextAreaKuvausMousePressed

    private void jTextFieldLinkkiMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextFieldLinkkiMousePressed
        jTextFieldLinkki.setForeground(Color.black);
        if (jTextFieldLinkki.getText().equals("Linkki")) {
            jTextFieldLinkki.setText("");
        }

    }//GEN-LAST:event_jTextFieldLinkkiMousePressed

    private void jTextFieldProjektiFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldProjektiFocusLost
        if (jTextFieldProjekti.getText().length() == 0) {
            jTextFieldProjekti.setForeground(Color.gray);
            jTextFieldProjekti.setText("Projektin nimi");
        }

    }//GEN-LAST:event_jTextFieldProjektiFocusLost

    private void jTextAreaKuvausFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaKuvausFocusLost
        if (jTextAreaKuvaus.getText().length() == 0) {
            jTextAreaKuvaus.setForeground(Color.gray);
            jTextAreaKuvaus.setText("Kuvaus");
        }

    }//GEN-LAST:event_jTextAreaKuvausFocusLost

    private void jTextFieldLinkkiFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldLinkkiFocusLost
        if (jTextFieldLinkki.getText().length() == 0) {
            jTextFieldLinkki.setForeground(Color.gray);
            jTextFieldLinkki.setText("Linkki");
        }
    }//GEN-LAST:event_jTextFieldLinkkiFocusLost

    /**
     * Tätä käyttää Muutos2
     */
    public void tallennaProjekti() {
        projektit.set(paikka, palautaKenttienArvotProjektiin());
        kayttaja.tallennaProjekti(projektit.get(paikka));
    }

    private void jComboBoxKuuluuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxKuuluuActionPerformed

        Object obj = new Object();
        obj = jComboBoxKuuluu.getSelectedItem();

        if (obj.toString().equals(" – ")) {
            kayttaja.getProjektit().get(paikka).setIsa(0);
        } else {
            for (Projekti projekti : kayttaja.getProjektit()) {
                if (projekti.getNimi().equals(obj.toString())) {
                    kayttaja.getProjektit().get(paikka).setIsa(projekti.getId());
                //       System.out.println("Isa-projektiksi valittu: " + obj.toString());
                }
            }
        }
    }//GEN-LAST:event_jComboBoxKuuluuActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        PanelTavoite ptavoite = new PanelTavoite();
        panelit.add(ptavoite);
        //    System.out.println("PANELIT SIZE " + panelit.size());
        jPanelMuistiinpanot.add(ptavoite);
        this.validate();
        this.updateUI();
}//GEN-LAST:event_jButton1ActionPerformed

    private void jTextFieldAlkuFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldAlkuFocusLost
        String alkupvm = jTextFieldAlku.getText();
        String tulostusmuoto = "yyyy-MM-dd";
        System.out.println("Validoidaan alkupvm");
        boolean valid = validateDate(alkupvm, true, tulostusmuoto);
        if (!valid) {
            jTextFieldAlku.setBackground(Color.PINK);
            jLabel7.setForeground(Color.RED);
        }
    }//GEN-LAST:event_jTextFieldAlkuFocusLost

    private void jTextFieldLoppuFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldLoppuFocusLost
        String loppupvm = jTextFieldLoppu.getText();
        String tulostusmuoto = "yyyy-MM-dd";
        System.out.println("Validoidaan loppupvm");
        boolean valid = validateDate(loppupvm, true, tulostusmuoto);
        if (!valid) {
            jTextFieldLoppu.setBackground(Color.PINK);
            jLabel8.setForeground(Color.RED);
        }
    }//GEN-LAST:event_jTextFieldLoppuFocusLost

    private void jTextFieldAlkuFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldAlkuFocusGained
        jTextFieldAlku.setBackground(Color.WHITE);
        jLabel7.setForeground(Color.GRAY);
    }//GEN-LAST:event_jTextFieldAlkuFocusGained

    private void jTextFieldLoppuFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldLoppuFocusGained
        jTextFieldLoppu.setBackground(Color.WHITE);
        jLabel8.setForeground(Color.GRAY);
    }//GEN-LAST:event_jTextFieldLoppuFocusGained

    private void jPanelMuistiinpanotComponentAdded(java.awt.event.ContainerEvent evt) {//GEN-FIRST:event_jPanelMuistiinpanotComponentAdded
        // System.out.println("Component Added() : TjM");
    }//GEN-LAST:event_jPanelMuistiinpanotComponentAdded

    private void TallennaNappiAction(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_TallennaNappiAction
        // System.out.println("TallennaNappiAction(); TjM");
}//GEN-LAST:event_TallennaNappiAction

    private void otsikko3MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_otsikko3MouseReleased
        if (jPanelArviointi.isVisible()) {
            jPanelArviointi.setVisible(false);
            merkki2.setText("►");
        } else {
            jPanelArviointi.setVisible(true);
            merkki2.setText("▼");
        }
    }//GEN-LAST:event_otsikko3MouseReleased

    private void jTextAreaArviointiFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaArviointiFocusGained
        jTextAreaArviointi.setForeground(Color.black);
        if (jTextAreaArviointi.getText().equals("Arviointi")) {
            jTextAreaArviointi.setText("");
        }
    }//GEN-LAST:event_jTextAreaArviointiFocusGained

    private void jTextAreaArviointiFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaArviointiFocusLost
        if (jTextAreaArviointi.getText().length() == 0) {
            jTextAreaArviointi.setForeground(Color.gray);
            jTextAreaArviointi.setText("Arviointi");
        }
    }//GEN-LAST:event_jTextAreaArviointiFocusLost

    private void merkki2MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_merkki2MouseReleased
        if (jPanelArviointi.isVisible()) {
            jPanelArviointi.setVisible(false);
            merkki2.setText("►");
        } else {
            jPanelArviointi.setVisible(true);
            merkki2.setText("▼");
        }
    }//GEN-LAST:event_merkki2MouseReleased

    private void merkki1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_merkki1MouseReleased
        if (jPanelMuistiinpanot.isVisible()) {
            jPanelMuistiinpanot.setVisible(false);
            merkki1.setText("►");
        } else {
            jPanelMuistiinpanot.setVisible(true);
            merkki1.setText("▼");
        }
    }//GEN-LAST:event_merkki1MouseReleased

    private void merkkiMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_merkkiMouseReleased
        if (jPanelProjekti.isVisible()) {
            jPanelProjekti.setVisible(false);
            merkki.setText("►");
        } else {
            jPanelProjekti.setVisible(true);
            merkki.setText("▼");
        }
    }//GEN-LAST:event_merkkiMouseReleased

    private void jButtonSelaaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSelaaActionPerformed
        //        jTextFieldLinkki.setText("");
        JFileChooser fc = new JFileChooser();
        fc.setDialogTitle("Valitse tiedosto");
        //fc.addChoosableFileFilter(new TulostaRTF());
        //fc.addChoosableFileFilter(new TulostaPDF());
        fc.setAcceptAllFileFilterUsed(false);                       // Ei näytä muita kuin kansioita, rtf:iä ja pdf:iä
        int returnVal = fc.showDialog(this, "Tallenna");        // ottaa vastaan minkätyyppinen tieto tulee palautteena

        if (returnVal == JFileChooser.ERROR_OPTION) {
            System.out.println("Tiedostonkäsittelyvirhe");
        } else if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            //System.out.println(file.getName());
            String ext = Utils.getExtension(file);

            if (ext != null) { // Estetään tuplatiedostopääte
                String tiedostoPolku = file.getAbsolutePath();
                //System.out.println("Tallennettu: " + tiedostoPolku + ".");
                jTextFieldLinkki.setText(""+tiedostoPolku);
            }
        }
        // TODO add your handling code here:
    }//GEN-LAST:event_jButtonSelaaActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButtonSelaa;
    public javax.swing.JButton jButtonTallenna;
    private javax.swing.JComboBox jComboBoxKuuluu;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabelPaivitetty;
    private javax.swing.JPanel jPanelArviointi;
    public javax.swing.JPanel jPanelMuistiinpanot;
    private javax.swing.JPanel jPanelProjekti;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextArea jTextAreaArviointi;
    private javax.swing.JTextArea jTextAreaKuvaus;
    private javax.swing.JTextField jTextFieldAlku;
    private javax.swing.JTextField jTextFieldLinkki;
    private javax.swing.JTextField jTextFieldLoppu;
    private javax.swing.JTextField jTextFieldProjekti;
    private javax.swing.JLabel merkki;
    private javax.swing.JLabel merkki1;
    private javax.swing.JLabel merkki2;
    private javax.swing.JLabel otsikko;
    private javax.swing.JLabel otsikko2;
    private javax.swing.JLabel otsikko3;
    // End of variables declaration//GEN-END:variables
    private ArrayList<Projekti> projektit;
    private ArrayList<PanelTavoite> panelit;
    private int paikka;
    private Kayttaja kayttaja;

    /**
     * Validate whether the argument string can be parsed into a
     * legal date.<br />
     *
     * Does check for formating errors and illegal data (so an invalid
     * month or day number is detected).
     * @param dateStr
     * @param allowPast set to true to allow dates in the past, false if
     * only dates in the future should be allowed.
     * @param formatStr date format string to be used to validate against
     * @return true if a correct date and conforms to the restrictions
     */
    public boolean validateDate(String dateStr,
            boolean allowPast,
            String formatStr) {
        if (formatStr == null) {
            return false; // or throw some kinda exception, possibly a InvalidArgumentException
        }
        SimpleDateFormat df = new SimpleDateFormat(formatStr);
        Date testDate = null;
        try {
            testDate = df.parse(dateStr);
        } catch (ParseException e) {
            System.out.println("Väärä päivämäärän muoto " + e);
            return false;
        }
        if (!allowPast) {
            // initialise the calendar to midnight to prevent
            // the current day from being rejected
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            if (cal.getTime().after(testDate)) {
                return false;
            }
        }
        // now test for legal values of parameters
        if (!df.format(testDate).equals(dateStr)) {
            System.out.println("Päivämäärä väärin");
            return false;
        }
        System.out.println("Validointi OK");
        return true;
    }
}
